home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / comm / www / Hunt.lha / Goodies / Spatch.rexx
OS/2 REXX Batch file  |  1999-02-04  |  8KB  |  300 lines

  1. /*
  2.  
  3. */
  4.  
  5. sPatch = "c:spatch"
  6.  
  7. OPTIONS RESULTS
  8.  
  9. PARSE ARG PubScreen
  10.  
  11. IF PubScreen == "?" THEN DO
  12.  OPTIONS PROMPT "PUBSCREEN/K: "
  13.  PARSE PULL PubScreen
  14. END
  15.  
  16. CALL _InitAll
  17.  
  18. /*
  19. ** Beschreibung der Applikation
  20. */
  21. appname     = 'SpatchGUI'
  22. applongname = 'SPatchGUI - ©1996 by Nils Görs'
  23. appinfo     = 'Oberfläche für spatch'
  24. appversion  = '1.0'
  25. apprelease  = '1'
  26. appdate     = '1.11.96'
  27.  
  28. /*
  29. spatch [-ooutput -ppatchfile] oldfile
  30. */
  31. _maintags:
  32. windowtags = WindowID(1),
  33.              PubScreenName(PubScreen),
  34.              WindowBackfillFB,
  35.              WindowTitle(appname appversion),
  36.              'HorizGroupA Space VertGroupA Space',
  37.         'BeginLine',
  38.                  Text3('   _OutPut:') 'TRAT_ID 1',
  39.                  StringGadget('',1),
  40.                  GetFileButton(2),
  41.         'EndLine',
  42.         'Space',
  43.         'BeginLine',
  44.                  Text3('_PatchFile:') 'TRAT_ID 3',
  45.                  StringGadget('',3),
  46.                  GetFileButton(4),
  47.         'EndLine',
  48.         'Space',
  49.         'BeginLine',
  50.                  Text3('  Old_File:') 'TRAT_ID 5',
  51.                  StringGadget('',5),
  52.                  GetFileButton(6),
  53.         'EndLine',
  54.         'Space',
  55.         Button('_StartPatch',10),
  56.              'Space EndGroup Space EndGroup EndProject'
  57.  
  58. /*
  59. ** Unterbrechungssignale
  60. */
  61.  
  62. SIGNAL ON break_c
  63. SIGNAL ON failure
  64. SIGNAL ON halt
  65. SIGNAL ON ioerr
  66. SIGNAL ON syntax
  67.  
  68. app = TR_CREATEAPP('TRCA_Name'     '"'appname'"',
  69.                    'TRCA_LongName' '"'applongname'"',
  70.                    'TRCA_Info'     '"'appinfo'"',
  71.                    'TRCA_Version'  '"'appversion'"',
  72.                    'TRCA_Release'  '"'apprelease'"',
  73.                    'TRCA_Date'     '"'appdate'"',
  74.                    'TAG_END')
  75.  
  76. IF app ~= '00000000'x THEN DO
  77.  
  78.    window = TR_OPENPROJECT(app,windowtags)
  79.    WindowProject=C2D(window) /* zum Locken des Fensters bei About */
  80.  
  81.    IF window ~= '00000000'x THEN DO
  82.       nummer = 0
  83.  
  84.       DO WHILE nummer = 0
  85.          CALL TR_WAIT(app,'')
  86.  
  87.          DO WHILE TR_HANDLEMSG(app,'event')
  88.  
  89. /******************
  90. *** CLOSEGADGET ***
  91. *******************/
  92.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN nummer = -1
  93.  
  94. /*************
  95. *** GADGET ***
  96. **************/
  97.             IF event.trm_class = 'TRMS_ACTION' THEN DO
  98.              SELECT
  99.               WHEN event.trm_id = 2 THEN CALL _OutPutRequest
  100.               WHEN event.trm_id = 4 THEN CALL _PatchFileRequest
  101.               WHEN event.trm_id = 6 THEN CALL _OldFileRequest
  102.               WHEN event.trm_id = 10 THEN CALL _StartPatch
  103.          OTHERWISE
  104.         NOP
  105.          END
  106.         END
  107. /* */
  108.          END
  109.       END
  110.       CALL TR_CLOSEPROJECT(window)
  111.    END
  112.    CALL TR_DELETEAPP(app)
  113. END
  114. EXIT(0)
  115.  
  116. _OutPutRequest:
  117. RequesterTitle= '"ASLFR_TitleText" "Please select outputfile (destination)"'
  118. call _FileRequester
  119. IF bool ~= 0 THEN CALL TR_SETATTRIBUTE(window,1,'TROB_String',filename.1)
  120. RETURN
  121.  
  122. _PatchFileRequest:
  123. RequesterTitle= '"ASLFR_TitleText" "Please select patchfile"'
  124. call _FileRequester
  125. IF bool ~= 0 THEN CALL TR_SETATTRIBUTE(window,3,'TROB_String',filename.1)
  126. RETURN
  127.  
  128. _OldFileRequest:
  129. RequesterTitle= '"ASLFR_TitleText" "Please select oldfile (source)"'
  130. call _FileRequester
  131. IF bool ~= 0 THEN DO
  132.   CALL TR_SETATTRIBUTE(window,5,'TROB_String',filename.1)
  133.    OutPut   = TR_GETATTRIBUTE(window,1,'TROB_STRING')
  134.     IF OutPut == "" THEN DO
  135.      OutPut = TR_GETATTRIBUTE(window,5,'TROB_String')
  136.      CALL TR_SETATTRIBUTE(window,1,'TROB_String',OutPut||".new")
  137.     END
  138. END
  139. RETURN
  140.  
  141. _FileRequester:
  142.   IF CommandPath ~= "" THEN DO
  143.                   bool = ASL_RequestFile(window,filename,,
  144.                                "ASLFR_PubScreenName" PubScreen,
  145.                    "ASLFR_InitialDrawer" CommandPath,
  146.                                 RequesterTitle)
  147.   END
  148.                        ELSE
  149.                   bool = ASL_RequestFile(window,filename,,
  150.                                "ASLFR_PubScreenName" PubScreen,
  151.                                 RequesterTitle)
  152.                   CommandPath=RXTR_PATHPART(filename.1)
  153. RETURN
  154.  
  155. _StartPatch:
  156. OutPut   = TR_GETATTRIBUTE(window,1,'TROB_STRING')
  157. PatchFile= TR_GETATTRIBUTE(window,3,'TROB_STRING')
  158. OldFile  = TR_GETATTRIBUTE(window,5,'TROB_STRING')
  159.  
  160. IF OldFile == "" THEN DO
  161.   CALL TR_SendMessage(Window,5,'TROM_ACTIVATE',0)
  162.   RETURN
  163. END
  164. IF Output == "" THEN DO
  165.   CALL TR_SendMessage(Window,1,'TROM_ACTIVATE',0)
  166.   RETURN
  167. END
  168. IF PatchFile == "" THEN DO
  169.   CALL TR_SendMessage(Window,3,'TROM_ACTIVATE',0)
  170.   RETURN
  171. END
  172.  
  173. ADDRESS COMMAND sPatch "-o"OutPut "-p"PatchFile OldFile
  174. RETURN
  175.  
  176. _InitAll:
  177. NL      = '0a'x
  178. TRUE    = 1
  179. FALSE   = 0
  180. Files.0 = 0
  181. CommandPath = ""
  182.  
  183.    /*
  184.    ** Open libs
  185.    */
  186.  
  187.    IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
  188.       IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN
  189.          quit('Cannot open tritonrexx.library!',10)
  190.  
  191.    IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN
  192.       IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN
  193.          quit('Cannot open rexxtricks.library!',10)
  194.  
  195.    IF ~SHOW('LIBRARIES','rexxsupport.library') THEN
  196.       IF ~ADDLIB('rexxsupport.library',9,-30,0) THEN
  197.          quit('Cannot open rexxsupport.library!',10)
  198.  
  199.    /*
  200.    ** Set current dir
  201.    */
  202.  
  203.    PARSE SOURCE . . . script .
  204.    progdir = PATHPART(script)
  205.  
  206.    booll = LENGTH(progdir)
  207.    booli= LASTPOS(":",progdir)
  208.    boolh= LASTPOS("/",progdir)
  209.  
  210.   IF booli <= booll THEN progdir2=progdir||"/"
  211.   IF boolh == 0 THEN progdir2=progdir||"/"
  212.  
  213.    CALL PRAGMA('D',progdir)
  214.  
  215. /* Gibt es einen Parameter für den Bildschirm. Wenn nicht, dann wird
  216.    der Screen auf dem defaultPubScreen geöffnet. */
  217.  
  218. IF PubScreen == "" THEN
  219.    PubScreen = RXTR_GETDEFAULTPUBSCREEN()
  220. CALL RXTR_PUBSCREENTOFRONT(PubScreen)
  221. RETURN
  222.  
  223. /*******************************************************************
  224.  ***  Routine, die das GUI auf einem neuen PubScreen öffnen läßt ***
  225.  *******************************************************************/
  226. _NewPubScreen:
  227. IF PUBSCREENLIST('ScreenList') == 0 THEN RETURN
  228.  
  229. delstart=LSEARCH(PubScreen,Screenlist)
  230. IF delstart ~= -1 THEN RXTR_STEMREMOVE(ScreenList,delstart)
  231.  
  232. ScreenListTags = WindowID(2),
  233.    WindowBackfillFB,
  234.    WindowPosition('TRWP_MOUSEPOINTER'),
  235.    WindowTitle('öffentlichen Bildschirm wechseln...'),
  236.    WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'),
  237.    PubScreenName(Pubscreen),
  238.    'VertGroupA',
  239.       'Space',
  240.       'HorizGroupA',
  241.          'Space',
  242.          ListSel('screenlist',301,0),
  243.          'Space',
  244.       'EndGroup',
  245.       'Space',
  246.       'HorizSeparator',
  247.       'Space',
  248.       'HorizGroupA',
  249.       'Space',
  250.       ButtonRE('Abbrechen',302),
  251.       'Space',
  252.    'EndGroup Space EndGroup EndGroup EndProject'
  253.  
  254.     PubScreenProject = TR_OPENPROJECT(app,Screenlisttags)
  255.  
  256.   IF PubScreenProject ~= '00000000'x THEN DO
  257.     CALL TR_LOCKPROJECT(window)
  258.  
  259.       DO WHILE ende ~= 1
  260.          DO WHILE TR_HANDLEMSG(app,'event2')
  261.             IF event2.trm_class = 'TRMS_ACTION' THEN ende = 1 /* Cancel Gadget */
  262.  
  263.             IF event2.trm_class = 'TRMS_NEWVALUE' THEN DO
  264.             nummer = TR_GETATTRIBUTE(PubScreenProject,301,'TRAT_Value')+1
  265.               PubScreen = ScreenList.nummer
  266.               CALL TR_UNLOCKPROJECT(window)
  267.               CALL TR_CLOSEPROJECT(PubScreenProject)
  268.               CALL TR_CLOSEPROJECT(window)
  269.               CALL TR_DELETEAPP(app)
  270.               CALL RXTR_PUBSCREENTOFRONT(PubScreen)
  271.               fromNewPub=1
  272.           CALL _MainTags
  273.             END
  274.          END
  275.       END
  276.  
  277.    ende = 0
  278.     CALL TR_UNLOCKPROJECT(window)
  279.     CALL TR_CLOSEPROJECT(PubScreenProject)
  280. END
  281. RETURN
  282.  
  283. /*******************************************************************************
  284. ** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
  285. *******************************************************************************/
  286.  
  287. break_c:
  288. failure:
  289. halt:
  290. ioerr:
  291. syntax:
  292.    SAY '+++ Fehler' rc 'in Zeile' sigl '-' ERRORTEXT(rc)
  293.    SAY SOURCELINE(sigl)
  294.  
  295.    IF app ~= '00000000'x THEN
  296.       CALL TR_DELETEAPP(app)
  297.  
  298.    EXIT(10)
  299. /*EOS*/
  300.